package com.registration.mapper;

import com.registration.bean.ScheduleBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
@Mapper
public interface ScheduleMapper {
    // 根据医生ID查询未来排班
    List<ScheduleBean> selectSchedulesByDoctorId(@Param("doctor_id") Integer doctorId);

    // 号源校验（加锁）
    ScheduleBean selectScheduleForUpdate(@Param("schedule_id") Integer scheduleId);

    // 减少号源
    int decreaseQuota(@Param("schedule_id") Integer scheduleId);

    // 增加号源
    int increaseQuota(@Param("schedule_id") Integer scheduleId);

    /**
     * 更新剩余号源
     * @param schedule_id 排班ID
     * @param remainingQuota 剩余号源
     * @return 更新结果
     */
    int updateRemainingQuota(@Param("schedule_id") Integer schedule_id, @Param("remainingQuota") int remainingQuota);

    /**
     * 获取可用排班
     * @param dept_id 部门ID
     * @param visit_date
     * @return
     */
    List<ScheduleBean> getAvailableSchedules(@Param("dept_id") Integer dept_id, @Param("visit_date") Date visit_date);

    /**
     * 获取当前正在就诊的排班
     * @return 当前正在就诊的排班
     */
    List<ScheduleBean> getCurrentVisitingSchedules();


    /**
     * 根据患者ID获取排班信息
     * @param patientId 患者ID
     * @return 排班信息
     */

    List<ScheduleBean> getSchedulesByPatientId(@Param("patientId") Integer patientId);


    // 排班id 查询排班信息
    ScheduleBean selectScheduleById(@Param("schedule_id") Integer scheduleId);


    /**
     * 新增单条排班
     * @param schedule 排班实体
     */
    void insertOne(ScheduleBean schedule);

    /**
     * 批量插入排班
     * @param scheduleList 排班列表
     */
    void insertMore(List<ScheduleBean> scheduleList);

    List<ScheduleBean> showQueueAndMy(@Param("scheduleId") Integer scheduleId);




}
